#!/usr/bin/python
#-*- coding: utf-8 -*-

# alles in einem nicht modul ausgelagert
print "Content-Type: text/html\n"

# wichtig cgi module importieren
import cgi
import cgitb
cgitb.enable()
import os
import random
import string
import sys


def getString(source):
    """Gibt einen grossen String zurueck und erwartet eine Liste von
    Dateinamen.
    """
    collection = ''
    for f in source:
        file_obj = file(f, 'r') # dateiobjekt
        collection += '\n%\n'+ file_obj.read()
    return collection # automatisch schliessen hoffentlich

def dumpString(string, filename):
    """Schreibt den uebergebenen string in die Datei filename.
    """
    handle = file(filename, 'w')
    handle.write(string)

def printText(collection # liste mit Zitaten (list)
              , p=None # gesuchtes pattern (String)
              ):
    """Liefert ein total zufaelliges oder Zitat oder ein zfaelliges, welches das Pattern enthaelt.
    """
    if p is None:
        return random.choice(lall)
    lfilter = [text for text in collection if p in text] # listcomprehension
    # wenn lfilter eine leere liste ist wurde das pattern nicht gefunden
    #random.choice(seq) liefert ein zufaelliges element einer sequenz
    return random.choice(lfilter) if lfilter else 'Leider kommt dieser Ausdruck niemals vor' 

#main
f1 = './fortunes/fortunes'
f2 = './fortunes/riddles'
f3 = './fortunes/literature'
dump = './dump.txt'
lall = []

source = list((f1,f2,f3))  # liste mit quelldateien
dumpString(getString(source), dump) # riesenstring in datei schreiben
lall = getString(source).split('\n%\n') # jedes Zitat ein Listenelement
#args = sys.argv[1:3]
#content +=  'args: %s \n' % (args)
#content += printText(lall, args[1]) if len(args) >= 2 and args[0] == '-m' else printText(lall)


# alle requeststring parameter holen in form speichern
form = cgi.FieldStorage()

# m initialisieren, pattern
m = ""

# heredoc string benutzen um zeilenumbrueche im Seitenquelltext automatisch zu haben
# nicht mehr noetig \n zu setzen
template = """
<html>
<head><title>%s</title></head>
<body>\n%s</body>
</html>
"""

title = "Mein Titel"
content = "<h2>Fortunes</h2>\n"


if "m" in form:
    m = form["m"].value


# benutzer darf suchwort eingeben und ok klicken
# \n um seitenquelltext lesbar zu machen
# variablen mit %s string ersetzung vormerken
content += """
<form action='fortune.cgi' method='GET' >
<input type='text' name='m' size='40' maxlength='10' value='%s'><br />
<input type='submit' name='ok' value='OK' size='90' maxlength='50' ><br />
"""
    
content += "</form>\n"
content = content % m

# wenn m nicht gesetzt ist abfangen
if len(m) > 0:
    content += printText(lall, m)
else:
    content += printText(lall)

print template % (title, content)
